package com.linjiang.design.factory;

//工厂方法模式(专注于具体的一个产品创建)
//定义一个用于创建对象的接口，让子类决定实例化哪一个类，使得一个类的实例化延迟到子类
public class FactoryMethodTest {
    public static void main(String[] args) {
        Application createProductA = new CreateProductB();
        createProductA.init();
        createProductA.process();
    }
}

abstract class Application{
    private Product product;

    //创建实例的抽象方法
    abstract Product createProduct();

    public void init(){
        product = createProduct();
    }

    public void process(){
        product.method();
    }

}

//这是简单工厂模式
class SimpleFactory{
    public static Product getByType(String type){
        if ("A".equals(type)){
            return new ProductA();
        }

        return null;
    }
}

class CreateProductA extends Application{

    @Override
    Product createProduct() {
        return new ProductA();
    }
}

class CreateProductB extends Application{

    @Override
    Product createProduct() {
        return new ProductB();
    }
}

interface Product{
    public void method();
}

class ProductA implements Product{
    @Override
    public void method() {
        System.out.println("ProductA");
    }
}

class ProductB implements Product{
    @Override
    public void method() {
        System.out.println("ProductB");
    }
}
